#ifndef __ZUCK_FONT_MACRO_HPP__
#define __ZUCK_FONT_MACRO_HPP__

#pragma once

#ifndef USE_DIVIDE_FONT_MACRO

#define ZUCK_FONT_NONE       "\033[0m" // font end string
#define ZUCK_FONT_BOLD       "\033[1m" // font bold
#define ZUCK_FONT_UNDERLINE  "\033[4m" // font underline
#define ZUCK_FONT_BLINK      "\033[5m"
#define ZUCK_FONT_REVERSE    "\033[7m"

#define ZUCK_FONT_BLACK_DARK    "\033[0;30m"
#define ZUCK_FONT_BLACK_LIGHT   "\033[1;30m"
#define ZUCK_FONT_RED_DARK      "\033[0;31m"
#define ZUCK_FONT_RED_LIGHT     "\033[1;31m"
#define ZUCK_FONT_GREEN_DARK    "\033[0;32m"
#define ZUCK_FONT_GREEN_LIGHT   "\033[1;32m"
#define ZUCK_FONT_YELLOW_DARK   "\033[0;33m"
#define ZUCK_FONT_YELLOW_LIGHT  "\033[1;33m"
#define ZUCK_FONT_BLUE_DARK     "\033[0;34m"
#define ZUCK_FONT_BLUE_LIGHT    "\033[1;34m"
#define ZUCK_FONT_PINK_DARK     "\033[0;35m"
#define ZUCK_FONT_PINK_LIGHT    "\033[1;35m"
#define ZUCK_FONT_CYAN_DARK     "\033[0;36m"
#define ZUCK_FONT_CYAN_LIGHT    "\033[1;36m"
#define ZUCK_FONT_GRAY_DARK     "\033[0;37m"
#define ZUCK_FONT_WHITE_LIGHT   "\033[1;37m"

#define ZUCK_BACKGROUND_DARK_RED      "\033[0;41m"
#define ZUCK_BACKGROUND_LIGHT_RED     "\033[1;41m"
#define ZUCK_BACKGROUND_DARK_GREEN    "\033[0;42m"
#define ZUCK_BACKGROUND_LIGHT_GREEN   "\033[1;42m"
#define ZUCK_BACKGROUND_DARK_YELLW    "\033[0;43m"
#define ZUCK_BACKGROUND_LIGHT_YELLOW  "\033[1;43m"
#define ZUCK_BACKGROUND_DARK_BLUE     "\033[0;44m"
#define ZUCK_BACKGROUND_LIGHT_BLUE    "\033[1;44m"
#define ZUCK_BACKGROUND_DARK_PINK     "\033[0;45m"
#define ZUCK_BACKGROUND_LIGHT_PINK    "\033[1;45m"
#define ZUCK_BACKGROUND_DARK_CYAN     "\033[0;46m"
#define ZUCK_BACKGROUND_LIGHT_CYAN    "\033[1;46m"

#else
#define ZUCK_FONT_BEGIN "\033"

#define ZUCK_DARK_COLOR  "[1;"
#define ZUCK_LIGHT_COLOR "[0;"
#define ZUCK_FONT_FINISH "m"

#define ZUCK_FONT_DARK_COLOR(num)  ZUCK_FONT_BEGIN ZUCK_DARK_COLOR #num ZUCK_FONT_FINISH
#define ZUCK_FONT_LIGHT_COLOR(num) ZUCK_FONT_BEGIN ZUCK_LIGHT_COLOR #num ZUCK_FONT_FINISH

#define ZUCK_FONT_RED_DARK   ZUCK_FONT_DARK_COLOR(31)
#define ZUCK_FONT_RED_LIGHT  ZUCK_FONT_LIGHT_COLOR(31)

#define ZUCK_FONT_GREEN_DARK  ZUCK_FONT_DARK_COLOR(32)
#define ZUCK_FONT_GREEN_LIGHT ZUCK_FONT_DARK_COLOR(32)

#define ZUCK_FONT_END_LINE   ZUCK_FONT_BEGIN "[0m"

#endif

namespace zuck {
enum font_color {
	red_dark     = -31,
	red_light    = 31,
	green_dark   = -32,
	green_light  = 32,
	yellow_dark  = -33,
	yellow_light = 33,

	blue_dark  = -34,
	blue_light = 34,
	pink_dark  = -35,
	pink_light = 35,
	cyan_dark  = -36,
	cyan_light = 36,
};
}

#endif // !__ZUCK_FONT_MACRO_HPP__

